home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib10.dsk
/
SHIP SHOOT.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
4KB
|
122 lines
10 REM **********************
11 REM * SHIP SHOOT *
12 REM * BY ROB SMYTHE *
13 REM * COPYRIGHT (C) 1982 *
14 REM * BY MICRO-SPARC INC *
15 REM * LINCOLN, MA. 01773 *
16 REM **********************
19 :
20 REM SET UP PROGRAM
30 :
40 IF PEEK(768) + PEEK(769) = PEEK(770) THEN 80: REM SKIP UNLESS FIRST RUN
50 GOSUB 890: REM INIT HRCG
60 PRINT D$;"BLOAD WORLD MAP.PIC,A$4000": REM PICTURE ON PAGE 2
70 POKE 768,1: POKE 769,2: POKE 770,3: REM SPECIFIC GARBAGE POKED WHERE LINE 10 CAN DETECT IT AND SKIP INTIALIZING AND PICTURE-LOADING ROUTINES
80 PRINT CHR$(16); CHR$(11)
90 HGR : POKE -16302,0
100 KB = -16384: REM KEYPRESS
110 G$ = CHR$(7): REM BELL
120 BU = -16286: REM BUTTON 0
130 GOSUB 1080: REM INITIALIZE HRCG CURSOR CONTROLS
140 SHIP$ = CB$ +" " +CC$ +" :^; " +CC$ +" (%) " +CC$ +" =!- " +CC$ +" " +CD$
150 :
160 REM START OF GAME
170 :
180 PRINT CP$: VTAB 10: PRINT "LEVEL OF DIFFICULTY (1 OR 2) ? ";: GET A$: PRINT A$
190 LEVEL = VAL(A$): IF LEVEL <1 OR LEVEL >2 THEN PRINT G$;: GOTO 180
200 POKE -16368,0:AA = 20:BB = 10:ENERGY% = 100:AMMO = 10
210 PRINT PT$CP$: REM TRANSPARENT WRITING, CLEAR SCREEN - PUTS PAGE 2 PICTURE ON PAGE 1
220 PRINT CA$1: REM SWITCH TO CHARACTER SET 1 (BYTE-CHANGED.SET)
230 VTAB 2: HTAB 2: PRINT "ENERGY: "
240 VTAB 2: HTAB 31: PRINT "AMMO: "AMMO
250 :
260 REM MAIN GAME LOOP
270 :
280 GOSUB 510: REM FIND PADDLE POSITION
290 ENERGY% = ENERGY% -1: VTAB 2: HTAB 10
300 HTAB 10: PRINT ENERGY%" "
310 IF ENERGY% = 0 THEN 730
320 GOSUB 560: REM FIRE?
330 IF PEEK(KB) >128 THEN PRINT PN$CA$0CP$: POKE -16368,0: END : REM EARLY EXIT
340 :
350 REM MOVE TOWARD PADDLE POSITION
360 :
370 IF PA = (AA) THEN 390
380 AA = AA +1 -2 *(PA <AA)
390 IF PB = BB THEN 410
400 BB = BB +1 -2 *(PB <BB)
410 IF BB >19 THEN BB = 19
420 IF AA >35 THEN AA = 35
430 HTAB (AA): VTAB (BB): PRINT SHIP$
440 GOSUB 560: REM FIRE?
450 GOSUB 800: REM MOVE TARGET
460 IF LEVEL = 2 THEN GOSUB 800
470 GOTO 280
480 :
490 REM FIND PADDLE POSITION
500 :
510 PA = PDL(0):PB = PDL(1):PA = INT(PA/255 *38 +1):PB = INT(PB/255 *22 +1)
520 RETURN
530 :
540 REM FIRE IF BUTTON PUSHED
550 :
560 IF PEEK(BU) <128 THEN RETURN : REM BUTTON NOT BEING PUSHED
570 HCOLOR= 5
580 HPLOT 10,190 TO 140,95 TO 269,190
590 FOR J = 1 TO 10: NEXT
600 HCOLOR= 0: HPLOT 10,190 TO 140,95 TO 269,190
610 AMMO = AMMO -1: VTAB 2: HTAB 37: PRINT AMMO;" "
620 IF AMMO = 0 THEN 680
630 IF AA <18 OR AA >20 OR BB <10 OR BB >11 THEN RETURN : REM NO HIT UNLESS TARGET IS WITHIN THESE CONSTRAINTS
640 HIT = HIT +1: PRINT G$;: RETURN
650 :
660 REM POST MORTEM - OUT OF AMMO
670 :
680 PRINT CA$0PN$CP$: VTAB 10: PRINT "OUT OF AMMUNITION": PRINT : PRINT "NUMBER OF HITS..."HITS
690 GOTO 740
700 :
710 REM POST MORTEM - OUT OF ENERGY
720 :
730 PRINT CA$0PN$CP$: VTAB 10: PRINT "OUT OF ENERGY": PRINT : PRINT "NUMBER OF HITS..."HITS
740 VTAB 20: PRINT "PLAY AGAIN (Y/N)? ";CE$;: GET A$: PRINT A$
750 IF A$ = "N" THEN END
760 GOTO 180
770 :
780 REM RANDOM MOVE OF SHIP
790 :
800 X = INT( RND(1) *3 -1):Y = INT( RND(1) *3 -1):AA = AA +X: IF AA >35 THEN AA = 35
810 IF AA <1 THEN AA = 1
820 BB = BB +Y: IF BB >19 THEN BB = 19
830 IF BB <1 THEN BB = 1
840 HTAB (AA): VTAB (BB): PRINT SHIP$
850 RETURN
860 :
870 REM INITIALIZE HRCG
880 :
890 ONERR GOTO 1010
900 TEXT : HOME : VTAB 12: HTAB 10: PRINT "SHIP SHOOT BY ROB SMYTHE": VTAB 14: HTAB 15: PRINT "PLEASE WAIT....":ADRS = 0
910 PRINT CHR$(4);"BLOAD RBOOT": CALL 520
920 ADRS = USR(0),"HRCG"
930 POKE 216,0
940 IF ADRS <0 THEN ADRS = ADRS +65536
950 CS = ADRS -768: HIMEM: CS
960 D$ = CHR$(4)
970 PRINT D$;"BLOAD BYTE-CHANGED.SET,A";CS
980 CH = INT(CS/256):CL = CS -CH *256
990 POKE ADRS +7,CL: POKE ADRS +8,CH: CALL ADRS +3
1000 RETURN
1010 TEXT
1020 PRINT "ERROR IN RLOAD OR RBOOT"
1030 POKE 216,0
1040 STOP
1050 :
1060 REM CURSOR CONTROL VARIABLES
1070 :
1080 CA$ = CHR$(1):CB$ = CHR$(2):CC$ = CHR$(3):CD$ = CHR$(4):CE$ = CHR$(5):CF$ = CHR$(6):CI$ = CHR$(9):CK$ = CHR$(11):CL$ = CHR$(12):CN$ = CHR$(14):CO$ = CHR$(15):CP$ = CHR$(16):CS$ = CHR$(19):CT$ = CHR$(20)
1090 CV$ = CHR$(22):CW$ = CHR$(23):CY$ = CHR$(25):CZ$ = CHR$(26)
1100 P1$ = CO$ +CA$:P2$ = CO$ +CB$:PT$ = CO$ +CT$:PN$ = CO$ +CP$
1110 REM P1$ - DISPLAY PAGE 1
1120 REM P2$ - DISPLAY PAGE 2
1130 REM PT$ - TRANSPARENT PRINTING
1140 REM PN$ - NORMAL PRINTING
1150 RETURN